home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / oasis / oasisegs.lha / egs / mmul.d < prev    next >
Text File  |  1992-04-23  |  3KB  |  70 lines

  1. /*======================================================================================================
  2.         Auxiliary  Data  Structure
  3. ======================================================================================================*/
  4. class matrix {
  5.     attribute:
  6.     public      int        size;                        # matrix size
  7.                 int[_,_]   mat;                         # matrix
  8.     private     int        seed = 197;                  # random number seed
  9.     method:
  10.     public      gen        (int I).
  11.     private     loop       (int I, J).
  12. }
  13.  
  14. matrix {
  15.     gen(size).
  16.     gen(I')      |- loop(I,I+1);
  17.                     gen(I+1).                           # go thru rows
  18.  
  19.     loop(_, size).
  20.     loop(I', J') |- seed' = (4757 * seed + 1) % 32768;
  21.                     (int) B' = 1 + ((seed / 16) % 256); # random number
  22.                     mat[I,J]' = B;                      # initialize (i,j)
  23.                     mat[J,I]' = B;                      # symmetric (j,i)
  24.                     loop(I, J+1).                       # go thru columns
  25. }
  26.  
  27. /*======================================================================================================
  28.         tsp  Specification
  29. ======================================================================================================*/
  30. class mmul {
  31.     constant:   int        n = 64;                      # n x n matrices
  32.     attribute:
  33.     protected   int[_,_]   a = $[n,n];
  34.                 int[_,_]   b = $[n,n];
  35.                 int[_,_]   c = $[n,n];
  36.     method:
  37.     private     loop       (int M).
  38.                 mmul       (int I).
  39.                 more       (int J, I).
  40.                 inner      (int K, J, I, S).
  41.     public      run        (int M).
  42. }
  43.  
  44. /*======================================================================================================
  45.         tsp  Implementation
  46. ======================================================================================================*/
  47. mmul {
  48.     loop(0).
  49.     loop(M')           |- mmul(n-1); loop(M-1).
  50.  
  51.     mmul(0)            |- more(n-1,0).
  52.     mmul(I')           |- more(n-1,I); mmul(I-1).
  53.  
  54.     more(0,I')         |- inner(n-1,0,I,0).
  55.     more(J',I')        |- inner(n-1,J,I,0); more(J-1,I).
  56.  
  57.     inner(0, J',I',S') |- c[I,J]' = S+a[I,0]*b[0,J].
  58.     inner(K',J',I',S') |- inner(K-1,J,I,S+a[I,K]*b[K,J]).
  59.  
  60.     run(M')            |- (matrix) A' = matrix{n,a};    # create multiplicand
  61.                           (matrix) B' = matrix{n,b};    # create multipler
  62.                           A ! gen(0);                   # generate random elements
  63.                           B ! gen(0);                   # generate random elements
  64.                           loop(M).                      # do multiplication
  65. }
  66.  
  67. /*======================================================================================================
  68.         The  End
  69. ======================================================================================================*/
  70.